import wx

# 自定义弹出层的类
class MyDialog(wx.Dialog):
    def __init__(self, parent, title):
        # 构建弹出层对象，需要提供父（一般是主窗体）、标题
        super(MyDialog, self).__init__(parent, title=title, size=(250, 150))
        # 弹出层上的面板
        panel = wx.Panel(self)
        # 面板上有一个Ok按钮，是一个确认按钮（因为有wx.ID_OK）
        # 点击之后能够确认关闭弹窗
        self.btn = wx.Button(panel, wx.ID_OK, label="ok", size=(50, 20), pos=(75, 50))

# 自定义窗体类
class Mywin(wx.Frame):
    def __init__(self, parent, title):
        # 构建主窗体
        super(Mywin, self).__init__(parent, title=title, size=(250, 150))
        self.InitUI()

    # 设置主窗体的布局
    def InitUI(self):
        panel = wx.Panel(self)
        btn = wx.Button(panel, label="Modal Dialog", pos=(75, 10))
        btn1 = wx.Button(panel, label="Modeless Dialog", pos=(75, 40))
        btn2 = wx.Button(panel, label="MessageBox", pos=(75, 70))
        btn.Bind(wx.EVT_BUTTON, self.OnModal)
        a = btn1.Bind(wx.EVT_BUTTON, self.OnModeless)
        # print(a)  # None
        btn2.Bind(wx.EVT_BUTTON, self.Onmsgbox)
        self.Centre()
        self.Show(True)

    # 打开模态框
    def OnModal(self, event):
        # 临时创建一个弹出层，基于主窗体，并且打开模态框
        a = MyDialog(self, "Dialog").ShowModal()
        # 是操作了模态框内部按钮产生的结果，是触发的按钮ID
        # 点了ok之后打印ok的按钮id => 5100
        print(a)

    # 非模态框方式打开，可以同时操作原窗体
    def OnModeless(self, event):
        a = MyDialog(self, "Dialog").Show()

    # 创建并打开消息提示框
    def Onmsgbox(self, event):
        # wx.OK表示有确认按钮，wx.ICON_INFORMATION表示信息图标
        wx.MessageBox("This is a Message Box", "Message", wx.OK | wx.ICON_INFORMATION)

ex = wx.App()
Mywin(None, 'MenuBar demo')
ex.MainLoop()
